package net.xo68.destiny.starter.manager;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.time.Duration;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Slf4j
@Data
@Configuration
@ConfigurationProperties("destiny.manager")
public class SchedulerManagerProperties {

    private boolean enable=true;

    /**
     * 执行器节点Ip匹配的正则，支持多个，多个用英文逗号分隔,不匹配的的注册信息将不接收注册（正则中不要出现逗号）
     */
    private String nodePatterns;

    /**
     * 用户令牌签名密钥
     */
    private String userTokenSecret ="wuxie@destiny";
    /**
     * 令牌签发人
     */
    private String userTokenIssuer ="wuxie<16349023@qq.com>";
    /**
     * 用户令牌过期时间
     */
    private Duration userTokenExpire=Duration.ofDays(1L);

    /**
     * 任务触发观察周期，单位：秒，默认：5秒
     */
    private Long triggerObserverPeriod=5L;
    /**
     * 任务触发观察缓存时间，单位：秒，默认：5秒，每5秒检查一下触发时间
     */
    private Long triggerObserverBufferTime=5L;

    /**
     * 每次最大观察数量
     */
    private int triggerObserverMaxSize=1000;

    /**
     * 每次观察超时时间，单位：秒，默认：5秒
     */
    private Long triggerObserverTimeout=5L;


    /**
     * 执行器节点的正则表达式集合
     * @return
     */
    public List<String> nodePatterns(){
        final List<String> patterns= new ArrayList<>();
        if(StringUtils.isNotBlank(this.nodePatterns)){
            final String[] exclusions=this.nodePatterns.split(",");
            Arrays.stream(exclusions).forEach(pattern->{
                patterns.add(pattern);
            });

        }
        return patterns;
    }
}
